package com.ljx.lambda.lambda01;

/**
 * @author LJX
 * @Description: TODO
 * @Date: 2022/11/3 9:27
 * @Version 1.0
 */
public class Test {
	public static void main(String[] args) {
		MyRunnable myRunnable = new MyRunnable();
		Thread thread = new Thread(myRunnable);
		thread.start();
		/**
		 * -  Thread 类需要 Runnable 接口作为参数，其中的抽象 run 方法是用来指定线程任务内容的核心
		 * -  为了指定 run 的方法体，不得不需要 Runnable 接口的实现类
		 * -  为了省去定义一个 Runnable 实现类的麻烦，不得不使用匿名内部类
		 * -  必须覆盖重写抽象 run 方法，所以方法名称、方法参数、方法返回值不得不再写一遍，且不能写错
		 * -  而实际上，似乎只有方法体才是关键所在。
		 */
		Runnable runnable=new Runnable() {
			@Override
			public void run() {
				System.out.println("B");
			}
		};
		Thread thread1 = new Thread(runnable);
		thread1.start();

		/**
		 * lambda 表达式 没有关注方法的名称以及方法的返回值类型
		 * --lambda表达式不会生成字节码文件
		 * 	lambda表达式 是一个特殊的匿名内部类，语法更简洁
 		 */

		Runnable r=()->{
			System.out.println("这是lambda表达式");
		};
		Thread thread2 = new Thread(r);

		// 如果lambda形参列表为空，只需要保留() 括号即可
		Thread thread3 = new Thread(()->{
			System.out.println("C");
		});
		thread3.start();

	}
}

class MyRunnable implements Runnable{

	@Override
	public void run() {
		System.out.println("A");
	}
}